自制 Creator 地图编辑器,让地图设计变得更灵活
游戏地图是游戏设计中重要且难的一个环节,如果说制作一款游戏是在创造一个新世界的话,那么地图就是这个世界最基础的构成单元。 ID 为 隐形人 的开发者,在 Cocos 论坛中分享了一款他自己钻研制作的游戏地图设计软件,名为闪影,从闪影的软件介绍到开发教程再到使用注意事项,他都一一发帖进行说明,可以说得上是非常用心了。近日, C 姐通过 QQ 联系到了这位开发者,获得了他的内容转载授权,同时对他进行了采访,采访内容见文末,欢迎大家围观!
隐形人
作者
程序员,注定是一个要不断思考,不断进步的职业。闪影的开发初衷很大一部分是来自兴趣,但它也将成为我工作所需的必要品。当我可以明确地为我的作品负责,看到它未来慢慢进化……对我而言,这绝对是一件“幸福”的事情。
————以下为作者授权转载————
闪影是什么?
闪影与 Tiled 有何不同?
Tiled 是发布一个文件,Cocos Creator 进行显示解析。但是闪影是在自有的显示界面,进行数据计算,然后在 Creator 中进行加载显示,也就是闪影用的所有东西,都是在 Creator API 基础上进行的,所有图块都是一个 Node ,所有的对像,你都拥有绝对的控制权,而且绝对不会有一点兼容问题,甚至通过闪影,你几乎可以完成对游戏地图上,所有的需求与设计。
在条件一样的情况下,只平铺一层地形,闪影与 Tiled 性能几乎一样。那么其他情况呢?可能高,也可能低,怎么解释?请记住闪影是在 Creator 基础上进行集成和扩展,我虽然进行了场外清除等计算,但是场内的显示区域是肯定要显示,并且影响性能的。我可以很负责任的说,你在 Creator 显示区域添加同等数量的精灵或碰撞体,其性能就等于闪影地图显示区域的性能。所以该如何优化完全要看你对 Creator 、闪影以及游戏性能的理解。路有很多,该如何选择,取决于你!
闪影与 Creator 是怎样的关系?
闪影与 Creator ,拥有绝对的支持关系,你通过 API 得到的每一个对像,就是 Creator 的 Node 对像,在闪影中添加的一个图块,相当在 Creator 里添加一个精灵 Node,在闪影添加碰撞体也就是,相当在 Creator 中添加了碰撞组件(当然动画不是 Animation 组件,动画是我自己扩展的 Node 类,比 Animation 组件要快,这里要注意一下)。可以说,对象都是你最熟悉的对像,除了要遵循我设计的一些法则外,你甚至可以将闪影看做 Creator 版的地图编辑器。
闪影是否能做 45 度等特殊图块?
我确实没做特殊地形的图层设计,但是能不能做特殊图块的地形,答案肯定是能。
闪影完全可以用很碎的图块,拼出一座城来,又怎么可能做不了一个平铺地形,只不过你用不了地形刷而已。我在开发闪影过程,因为很多不满意的地方,所以说在很长的一段时期中,我都在为闪影疯狂地加功能,去界限,改形态,直到有一天我发现连我自己都不了解它了。这并不是夸张,当一件事,可以用两三种甚至更多的方法来完成的时候,你就会考虑其中的利与弊。
闪影是可以用不同的方法,来完成同一件事,这其中包括一个图块的大小,一个属性的设计,一片区域图块堆积的情况。甚至在 Creator 和闪影,都能控制 Node 对像的情况下,该由谁去控制,都会造成不同的用户体验。
闪影怎么下载?
软件名称:闪影,版本号:0.8.1
下载地址:https://pan.baidu.com/s/1FfT1FxIfy-g05BMT0N05tA(可复制至浏览器打开)
这个版本,我取消了 fire 文件的发布,也就说只能发布 JS 文件,其中我集成了大量 API ,以及数据统计,为了能做到一切皆对像,一切皆可行。事实上效果还不错,闪影在大数据统下,几乎开放了对所有对像的访问和更改,让使用者可以用不同的路、不同的方法来实现同一个目标。可惜的是,这也让闪影变得不在简单,或者说你需要充分的理解才能完美的使用它。
PS:这软件就是我一个人开发的,所以精力有限,无法保证太多,但是我会尽力维护,软件很小,秒开秒关。如果大家在使用的过程中有出现问题,不要存档,将问题反馈给我处理, QQ:372852066。
闪影使用注意事项
1、闪影所有素材,都是动态加载的,所有素材都必需要放到 Creator 项目中的resources 文件夹中。
2、闪影很多方法,都要传入 Node 或图块 ID ,但是相对来说,传入图块 ID,会更安全一些,因为池对像的关系,绝对相同的对像会被重复利用。拿到同一个 Node 的索引,也可能会因为再次加载而转换另一个位置。所以图块 ID,是唯一记录的媒介。
3、并不是所有显示区域内的所有对像,都有 ID 信息。其中组和图层 Node,都没有 ID 。组是做为容器进行显示,当组中有图块时,才会被加载,否则将清除返回到池对像中。但是这里是有区别的,因是组是独一无二的,不存在相同一说。所以它的池对像也只存在它自己,这样话你可以对组进行一些透明度和颜色等更改,再加载时它会显示更改后的样子(但是不要更改坐标和旋转属性)。至于图层对像,和上面的差不多,但是作用会更大一些,而且是一直存在的。
4、组只是个父级容器,并不能改变图块计算规则,所以想着靠移动组,来移动里面的图块,是绝对不安全的,也不要想着通过遍历组里面的子对像,来得到所有图块的 ID ,因为即使是组,图块也遵循场外裁切的规律。如果组内有十个图块,很可能五个在舞台中,五个在舞台外,所以这是不安全的。
5、添加碰撞动画时,属性面版空帧时,会显示除tag参数外,其他都为 0 。这里要注意,当所有属性都为 0 ,是可以写入的,但不代表空帧。这是因为空帧时,我不好将所有属性都隐藏,所为用 0 表示。但是 0 不代表没有,所有属性都为 0 了,其实就是将碰撞形状变成一个点,而且这个点是可以碰到的。但是空帧是将这个碰撞组件的 enabled 设置为 false ,是不可以碰到的。
6、碰撞体的外框,并不会计算到显示区域内,也就说一个图块没有在舞台中,那么它身上的碰撞体也不会被显示,即使这个图块的碰撞体的范围接触到了舞台显示区域。
7、闪影有地形和自由两种图块,相应的箭头与橡皮工具,都有区分选项。如果你发现无法选中,或是删除不了某种图块,请先看看工具下面的小选项,是否选错了。
8、我在做地图时,喜欢建一个人物层,然后将角色等相关放到人物层中,但这样有一点一定要注意,清除或更改地图时,要执行 RemoveAll 方法,但 RemoveAll 方法清除图层 Node时,会执行 DestroyAllChildren 方法,如果你不及时,把你需要的 Node 对像取出,那么肯定会一起销毁。
9、SetLocationFun 不是只是移动地图,也是更新地图,如果屏幕旋转导致地图没有及时更新,可以在相应位置执行一次 SetLocationFun 来进行刷新,还有就是当隐藏图层 Node 的时候,会不进行地图计算,里面的图块也会回收,那么再次显示时,实际是显示空的图层,如果没有地方调用 SetLocationFun,那么很可能就会一直空,记住 SetLocationFun 第三个参数是一个图层名,也就是说可以单层刷新。
11、闪影与 Tiled 是完完全全地两种软件。从界面、操作到理念,都不相同,不要企图在一个上找到另一个的影子,并且将理念强加到另一个上。
12、闪影是面向对像的,你要明白每个你放到舞台上的图块都是 Node 对像。它们的大小,以及是否应该显示,对游戏都是有影响的,特别是同屏数量很多的时候。那你就要考虑从它们的堆积数量,以及大小来"开刀"。
上图,我是建了一个地面图层,并平铺了一层草地,然后我又建了个地面装饰图层,在里面刷了一排树。这原本没什么,但是我是在地面之上刷的一排树,而且这排树的区域完全覆盖了下面的草地图块,我也十分肯定下面的草地图块,已经用不上了。那我删除下面无用的图块,绝对是件正确的事。
闪影是以对像形式展现的,不是在一张纸上,你涂一层红色,再涂上一层黑色,红色就完全消失了,这是错误的。
还有很多游戏素材是 32*32 的,平铺整个屏幕其实数量不少,但如果改成 64*64 的,数量就会瞬间减少四分之三,而且你只需要把会大量平铺的图块改一下就行,像花盆呀、垃圾桶呀,这种偶尔才出现的素材,不用管。
了解更多使用注意事项,或者想要学习更多,可以戳下方帖子链接(可复制至浏览器中打开):
http://forum.cocos.com/t/topic/61561
http://forum.cocos.com/t/cocoscreator/61560
用闪影发布的 JS 文件,可以随便查看,代码都在里面。如果你想做一些小的更改,也没有什么关系,如果想大范围的更改,哈哈!祝你好运!
<转载完毕>
以下为采访内容:
请问您主要做什么类别的产品呢?
大概是08、09年开始学的程序,到现在一直都是程序员。那时用的是flash ,所以我入门语言也是flash的as2和as3。期间也做过不少东西,比如网站、课件、游戏。主要是以游戏为主,大多数是页游,除了给公司做项目以外,我自己独立做的游戏,也百款以上了。
您是基于什么样的初衷开始做闪影呢?是兴趣还是工作所需呢?
从始至今,我开发闪影的目的都是很单纯且一致的,就是希望能够弥补其他工具的不足,能够让游戏开发变得简单轻松一点,我的初衷与 Cocos一贯的理念“让游戏开发更简单”不谋而合。目前现有类似闪影的工具,有些事情做起来还是很难,门槛很高,甚至无法实现。所以,不管是基于兴趣还是工作,我都非常需要有一款新的更好用的软件,因此我决定开始做闪影。
从您有做闪影的想法到闪影发布,您大概花了多长时间?
想法诞生得很早,在四五年前,我就想做一个类似闪影的这么一个软件来帮助我。但那时比较忙,能力积累也没达到现在的境界,所以就搁置了。从真正开始开发闪影到现在,大概花有一年零三四月的时间。
在做闪影的过程中,您认为,您最大的收获是什么呢?
最大的收获不是我学到领悟了什么,而是我开发闪影到一定程序的时候,我知道我有能力将他完成了,我可以对自己开发东西‘相视一笑’,可以没有负担地去做了,这么一个时刻是最棒的。
程序员这个职业,注定是要不断思考,不断进步的,但是过程中也注定会有痛苦和无能为力的时候。所以,当我面对我的作品,我可以明确地为他负责,可以将心中的想法都写出来,可以看到它未来慢慢进化的过程……这对我而言,甚至可能对大多程序员而言,绝对是最大的收获。
后续您是否还会更新更多教程呢?
这个肯定会的,软件也在进步,而且还有很多东西没讲清。不管是视频教程,还是一些视频教程里没说的,我都有在 Cocos 论坛里写,所以有兴趣的话,可以常去 Cocos 论坛看看,说不定就有更新了。 闪影我会持续更新下去,闪影功能会越来越强大。所以,你就放心去用吧!
非常感谢隐形人接受我的采访!我们也期待有更多开发者带来更多干货分享,欢迎大家到 Cocos 论坛中发帖交流!
更多精彩内容